/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Mercado.model;

import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.data.xml.CategoryDatasetHandler;

/**
 *
 * @author rafael
 */
public class Relatorio extends Estoque_abstract{
    private String[][] clientes;
    int tt;
    
    /**
     * Cria estoque.
     * Inicializa atributos do estoque.
     * @param cad
     **/
    public Relatorio(Cadastro cad){
        super();
        carregaRelatorios(cad);
    }
    
    public DefaultCategoryDataset criaGraficoItens(){
        DefaultCategoryDataset dados = new DefaultCategoryDataset();
        //dados.addValue(itensvendidos, nomeItem, "Produto");
        int i=0;
        for (Produto p: getProdutos()){
            dados.addValue(getQtdItens().get(i), p.getNome(), "Produtos");
            i++;
        }
        return dados;
    }
    
//    public ChartPanel graficoItens(){
//        DefaultCategoryDataset gra = criaGraficoItens();
//        String tit = "Venda por Itens";
//        String qtd = "Quantidade";
//        String leg = "";
//        boolean legenda = true, tooltips = true, urls = true;
//        JFreeChart graf = ChartFactory.createBarChart3D(tit, leg, qtd, gra, PlotOrientation.VERTICAL, legenda, tooltips, urls);
//        ChartPanel area = new ChartPanel(graf, true);
//        area.setSize(600,400);
//        area.setVisible(true);
//        return area;
//    }
    
    public DefaultPieDataset criaGraficoClientes(){
        DefaultPieDataset dados = new DefaultPieDataset();
        int i;
        String[][] melhoresClientes = ordenaClientesVenda();
        for(i=0;i<6;i++){
            if(!melhoresClientes[i][1].equals("-1"))
                dados.setValue(melhoresClientes[i][0],Float.parseFloat(melhoresClientes[i][1]));
        }
        return dados;
    }
    
//    public ChartPanel graficoClientes(){
//        DefaultPieDataset gra = criaGraficoClientes();
//        String tit = "Venda por Clientes";
//        String qtd = "Porcentagem";
//        String leg = "";
//        boolean legenda = true, tooltips = true, urls = true;
//        JFreeChart graf = ChartFactory.createPieChart3D(tit, gra, legenda, tooltips, urls);
//        ChartPanel area = new ChartPanel(graf, true);
//        area.setSize(600,400);
//        area.setVisible(true);
//        return area;
//    }
    
    /**
     * Carrega o conteúdo do estoque.
     * Carrega todos os itens, quantidades dos mesmos e total de itens conforme
     * previamente informado em um arquivo.
     * @param cad
     **/
    public void carregaRelatorios(Cadastro cad){
        limpaDados();
        int i,j=0;
        float total;
        tt=0;
        clientes = new String[cad.totalClientes()][2];
        for (Cliente cli: cad.getClientes()){
            total=0;
            for(Compra com: cli.getCompras()){
                i=0;
                for(Produto p: com.getItens()){
                    total+= p.getPreco()*com.getQtd(i);
                    if(isCadastrado(p))
                        adicionaProdutoQtd(p.getCodigo(), com.getQtd(i));
                    else
                        adicionaProduto(p, com.getQtd(i));
                i++;
                }
            }
            clientes[j][0]=cli.getNome();
            clientes[j][1]=String.valueOf(total);
            tt+=total;
            j++;
        }
    }

    private String[][] ordenaClientesVenda() {
        int i,j,k=0;
        String[][] mel = new String[6][2];
        String sn, sq;
        for (i=0;i<5;i++){
            mel[i][0]="";
            mel[i][1]="-1";
        }
        for(i=0;i<clientes.length;i++){
            if(Float.parseFloat(clientes[i][1]) >= Float.parseFloat(mel[4][1])){
                mel[4][0] = clientes[i][0];
                mel[4][1] = clientes[i][1];
                mel = ordena(mel);
            }
        }
        
        for(i=0;i<5;i++)
            if(Float.parseFloat(mel[i][1])!=-1)
                k+=Float.parseFloat(mel[i][1]);
        mel[5][0]="Outros";
        mel[5][1]=String.valueOf(tt-k);
        return mel;
    }

    private String[][] ordena(String[][] mel) {
        int i,j;
        String sn,sq;
        for(i=0;i<5;i++)
            for(j=0;j<4;j++)
                if(Float.parseFloat(mel[j][1])<Float.parseFloat(mel[j+1][1])){
                    sn = mel[j][0];
                    sq = mel[j][1];
                    mel[j][0] = mel[j+1][0];
                    mel[j][1] = mel[j+1][1];
                    mel[j+1][0] = sn;
                    mel[j+1][1] = sq;
                }
        return mel;
    }
}
    
